<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /**
         * 《猜数字游戏》作业要求：
            1. 系统随机生成一个不重复的4位数；
            2. 弹出输入框，请用户输入一个不重复的4位数；
            3. 判断用户输入的是否是4位数（多了少了都提示用户“请输入4位数”）；
            4. 判断用户输入的是否包含重复数字（重复了提示用户“请输入不重复的4位数”）
            5. 格式输入正确后，才进行数字匹配环节；
                - 弹出提示框，告诉用户匹配结果xAxB；
                - 弹出提示框，提示用户还有x次机会；
            6. 总共10次猜数字机会（格式不对，不扣除次数）
            6. 匹配规则：
                - 数字对，位置不对，B+1；
                - 数字对，位置也对，A+1；
                - 4A，则说明猜对了；
            7. 10次机会用完，还没猜对，提示用户“游戏结束”，可以显示出正确答案。结束游戏。
            8. 10次机会内猜对，提示用户“恭喜你，猜对了！”，结束游戏。

            相关代码：
            1. 弹出输入框：prompt("");
            2. 弹出提示框（不带输入框）：alert("")
            3. 生成一个0-9之间的任意随机数：let num = parseInt(Math.random() * 10)
        */

        main();

        // 游戏主流程
        function main() {
            alert("欢迎进入猜数字游戏!");
            // 调用createRandom()来生成随机4位数，并接收内部返回的结果
            const system_num = createRandom();
            let chance = 10;
            console.log(system_num);
            while (true) {
                const user_num = prompt('请输入一个不重复的4位数:');
                if (user_num.length !== 4) {
                    alert("您输入不是一个4位数，请重新输入。");
                } else if (isRepeat(user_num)) {
                    alert("您输入的数字中包含重复的数字");
                } else {
                    // 进入游戏的数字匹配环节
                    const matchResult = isMatch(system_num, user_num)
                    alert(`匹配结果为：${matchResult[0]}A${matchResult[1]}B`);
                    if (matchResult[0] != 4) {
                        chance--;
                        if (chance == 0) {
                            alert("你的机会用完了，游戏结束！");
                            alert(`正确答案是：${system_num}`);
                            return;
                        }
                        alert(`你还有${chance}次机会。`);
                    } else if (matchResult[0] == 4) {
                        alert(`恭喜你，猜对了！正确答案是：${system_num}`);
                        return;
                    }
                }
            }
        }

        // 对两组数进行A和B的匹配
        function isMatch(system_num, user_num) {
            let a = 0;
            let b = 0;
            for (let i = 0; i < system_num.length; i++) {
                for (let j = 0; j < user_num.length; j++) {
                    if (system_num[i] == user_num[j] && i == j) {
                        a++;
                    } else if (system_num[i] == user_num[j]) {
                        b++;
                    }
                }
            }
            return [a, b];
        }


        // 判断给定的数据中是否包含重复的数字
        function isRepeat(str) {
            for (let value of str) {
                if (str.indexOf(value) !== str.lastIndexOf(value)) {
                    // 进入if，说明数字重复了
                    return true;
                }
            }
            // 执行到for循环后面，函数还没结束，说明数字没有重复
            return false;
        }


        // 生成不重复的4位数
        function createRandom() {
            let str = '';
            while (str.length < 4) {
                let num = parseInt(Math.random() * 10);
                if (!str.includes(num)) {
                    str += num;
                }
            }
            return str;
        }

    </script>
</body>

</html>